home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Borland Visual dBASE Professiona v7.0 / DATA1.CAB / Sample_dBASE / Generic.wfm < prev    next >
Text File  |  1997-11-20  |  22KB  |  892 lines

  1. //--------------------------------------------------------------
  2. //
  3. //  Generic.wfm 
  4. //
  5. //  Run this form to connect to a BDE alias and create
  6. //  a data entry form for that data source. This form 
  7. //  can create and populate a small sample table on
  8. //  SQL database servers such as Oracle, Sybase, and
  9. //  InterBase. It can also works with dBASE tables
  10. //  if you connect to a standard BDE alias.
  11. // 
  12. //  Dependencies: BDE alias with table creation rights.
  13. //
  14. //  Visual dBASE Samples Group
  15. //
  16. //  $Revision:   1.13  $
  17. //
  18. //  Copyright (c) 1997, Borland International, Inc. 
  19. //  All rights reserved.
  20. //
  21. //---------------------------------------------------------------
  22.  
  23. #include "bde4api.h"
  24. #define PAGE_ALIAS      1
  25. #define PAGE_PASSWORD   2
  26. #define PAGE_DATA       3
  27. #define PAGE_ERROR      4
  28. #define BACKSPACE_KEY   8  /* ASCII value of Backspace key */
  29. #define TAB_KEY         9  /* ASCII value of Backspace key */
  30. #define DELETE_KEY    127  /* ASCII value of Delete key */
  31.  
  32. SET TALK OFF
  33. ** END HEADER -- do not remove this line
  34. //
  35. // Generated on 10/20/97
  36. //
  37. parameter bModal
  38. local f
  39. f = new genericForm()
  40. if (bModal)
  41.    f.mdi = false // ensure not MDI
  42.    f.readModal()
  43. else
  44.    f.open()
  45. endif
  46.  
  47. class genericForm of FORM
  48.    set procedure to ( _dbwinhome + "CUSTOM\DATABUTTONS.CC" ) additive
  49.    with (this)
  50.       open = class::FORM_OPEN
  51.       scaleFontSize = 8
  52.       scaleFontBold = false
  53.       height = 14
  54.       left = 6
  55.       top = 2
  56.       width = 72
  57.       text = "Generic Data Entry Form"
  58.       background = "filename gdiag.jpg"
  59.    endwith
  60.  
  61.  
  62.    this.SESSION1 = new SESSION()
  63.    this.SESSION1.parent = this
  64.    with (this.SESSION1)
  65.       left = 0
  66.       top = 0
  67.       lockRetryInterval = 0
  68.    endwith
  69.  
  70.  
  71.    this.DATABASE1 = new DATABASE()
  72.    this.DATABASE1.parent = this
  73.    with (this.DATABASE1)
  74.       left = 4
  75.       top = 0
  76.       databaseName = "VDBSAMPLE"
  77.       session = form.SESSION1
  78.       active = true
  79.    endwith
  80.  
  81.  
  82.    this.SAMPLE1 = new QUERY()
  83.    this.SAMPLE1.parent = this
  84.    with (this.SAMPLE1)
  85.       left = 66
  86.       top = 1
  87.       database = form.database1
  88.       sql = 'SELECT * FROM "Sample.dbf"'
  89.       active = true
  90.    endwith
  91.  
  92.  
  93.  
  94.  
  95.    this.LINE1 = new LINE(this)
  96.    with (this.LINE1)
  97.       left = 70
  98.       right = 2
  99.       top = 2.75
  100.       bottom = 2.75
  101.       width = 2
  102.       metric = 0
  103.       colorNormal = "darkblue"
  104.       pageno = 0
  105.    endwith
  106.  
  107.  
  108.    this.LABELSELECTDB = new TEXT(this)
  109.    with (this.LABELSELECTDB)
  110.       height = 0.8
  111.       left = 4
  112.       top = 3.5
  113.       width = 20
  114.       metric = 0
  115.       colorNormal = "BtnText"
  116.       transparent = true
  117.       fontName = "Arial"
  118.       fontSize = 9
  119.       text = "Select a database alias:"
  120.    endwith
  121.  
  122.  
  123.    this.COMBODATASOURCE = new COMBOBOX(this)
  124.    with (this.COMBODATASOURCE)
  125.       height = 1.0909
  126.       left = 28
  127.       top = 3.5
  128.       width = 30
  129.       metric = 0
  130.       fontSize = 8
  131.       style = 2
  132.    endwith
  133.  
  134.  
  135.    this.BUTTONOPEN = new PUSHBUTTON(this)
  136.    with (this.BUTTONOPEN)
  137.       onClick = class::BUTTONOPEN_ONCLICK
  138.       height = 1.2
  139.       left = 4
  140.       top = 5.5
  141.       width = 12
  142.       text = "Open"
  143.       metric = 0
  144.       fontSize = 8
  145.       group = true
  146.       value = false
  147.    endwith
  148.  
  149.  
  150.    this.CHECKCREATE = new CHECKBOX(this)
  151.    with (this.CHECKCREATE)
  152.       transparent = true
  153.       height = 1
  154.       left = 5
  155.       top = 8
  156.       width = 63
  157.       text = "Create DBASEGEN table (requires 'create' rights)"
  158.       metric = 0
  159.       colorNormal = "WindowText/BtnFace"
  160.       fontName = "Arial"
  161.       fontSize = 9
  162.       value = true
  163.       group = true
  164.    endwith
  165.  
  166.  
  167.    this.HELP1 = new TEXT(this)
  168.    with (this.HELP1)
  169.       height = 2
  170.       left = 5
  171.       top = 10
  172.       width = 62
  173.       metric = 0
  174.       colorNormal = "BtnText"
  175.       transparent = true
  176.       fontName = "Arial"
  177.       fontSize = 9
  178.       text = "You can use this form as a sample data entry form for any data source connected through a valid BDE alias. "
  179.    endwith
  180.  
  181.  
  182.    this.LABELALIAS = new TEXT(this)
  183.    with (this.LABELALIAS)
  184.       height = 0.9
  185.       left = 4
  186.       top = 0.5
  187.       width = 18
  188.       metric = 0
  189.       colorNormal = "BtnText"
  190.       transparent = true
  191.       fontName = "Arial"
  192.       fontSize = 9
  193.       text = "Current database alias:"
  194.       pageno = 0
  195.    endwith
  196.  
  197.  
  198.    this.VALUEALIAS = new TEXT(this)
  199.    with (this.VALUEALIAS)
  200.       height = 0.9
  201.       left = 23
  202.       top = 0.5
  203.       width = 29
  204.       metric = 0
  205.       colorNormal = "BtnText"
  206.       transparent = true
  207.       fontName = "Arial"
  208.       fontSize = 9
  209.       fontBold = true
  210.       fontItalic = true
  211.       text = "none"
  212.       pageno = 0
  213.    endwith
  214.  
  215.  
  216.    this.LABELDRIVER = new TEXT(this)
  217.    with (this.LABELDRIVER)
  218.       height = 0.9
  219.       left = 4
  220.       top = 1.5
  221.       width = 18
  222.       metric = 0
  223.       colorNormal = "BtnText"
  224.       transparent = true
  225.       fontName = "Arial"
  226.       fontSize = 9
  227.       text = "Driver:"
  228.       pageno = 0
  229.    endwith
  230.  
  231.  
  232.    this.VALUEDRIVER = new TEXT(this)
  233.    with (this.VALUEDRIVER)
  234.       height = 0.9
  235.       left = 23
  236.       top = 1.5
  237.       width = 29
  238.       metric = 0
  239.       colorNormal = "BtnText"
  240.       transparent = true
  241.       fontName = "Arial"
  242.       fontSize = 9
  243.       fontBold = true
  244.       fontItalic = true
  245.       text = "STANDARD"
  246.       pageno = 0
  247.    endwith
  248.  
  249.  
  250.    this.BUTTONDATABACK = new PUSHBUTTON(this)
  251.    with (this.BUTTONDATABACK)
  252.       onClick = class::BUTTONDATABACK_ONCLICK
  253.       height = 1.2
  254.       left = 54
  255.       top = 0.5
  256.       width = 14
  257.       text = "Change Alias"
  258.       metric = 0
  259.       fontSize = 8
  260.       group = true
  261.       pageno = 3
  262.       value = false
  263.    endwith
  264.  
  265.  
  266.    this.LABELID = new TEXT(this)
  267.    with (this.LABELID)
  268.       height = 1
  269.       left = 14
  270.       top = 7
  271.       width = 11
  272.       metric = 0
  273.       colorNormal = "BtnText"
  274.       transparent = true
  275.       fontName = "Arial"
  276.       fontSize = 9
  277.       text = "Client ID:"
  278.       pageno = 3
  279.    endwith
  280.  
  281.  
  282.    this.ENTRYID = new ENTRYFIELD(this)
  283.    with (this.ENTRYID)
  284.       height = 1
  285.       left = 28
  286.       top = 7
  287.       width = 12
  288.       metric = 0
  289.       colorHighLight = ""
  290.       fontSize = 8
  291.       value = "entryID"
  292.       validRequired = true
  293.       pageno = 3
  294.       borderStyle = 7
  295.    endwith
  296.  
  297.  
  298.    this.LABELCONTACT = new TEXT(this)
  299.    with (this.LABELCONTACT)
  300.       height = 1
  301.       left = 14
  302.       top = 8
  303.       width = 11
  304.       metric = 0
  305.       colorNormal = "BtnText"
  306.       transparent = true
  307.       fontName = "Arial"
  308.       fontSize = 9
  309.       text = "Contact:"
  310.       pageno = 3
  311.    endwith
  312.  
  313.  
  314.    this.ENTRYCONTACT = new ENTRYFIELD(this)
  315.    with (this.ENTRYCONTACT)
  316.       height = 1
  317.       left = 28
  318.       top = 8
  319.       width = 32
  320.       metric = 0
  321.       colorHighLight = ""
  322.       fontSize = 8
  323.       value = "entryContact"
  324.       validRequired = true
  325.       pageno = 3
  326.       borderStyle = 7
  327.    endwith
  328.  
  329.  
  330.    this.LABELCOMPANY = new TEXT(this)
  331.    with (this.LABELCOMPANY)
  332.       height = 1
  333.       left = 14
  334.       top = 9
  335.       width = 11
  336.       metric = 0
  337.       colorNormal = "BtnText"
  338.       transparent = true
  339.       fontName = "Arial"
  340.       fontSize = 9
  341.       text = "Company:"
  342.       pageno = 3
  343.    endwith
  344.  
  345.  
  346.    this.ENTRYCOMPANY = new ENTRYFIELD(this)
  347.    with (this.ENTRYCOMPANY)
  348.       height = 1
  349.       left = 28
  350.       top = 9
  351.       width = 32
  352.       metric = 0
  353.       colorHighLight = ""
  354.       fontSize = 8
  355.       value = "entryCompany"
  356.       validRequired = true
  357.       pageno = 3
  358.       borderStyle = 7
  359.    endwith
  360.  
  361.  
  362.    this.LABELEMAIL = new TEXT(this)
  363.    with (this.LABELEMAIL)
  364.       height = 0.8
  365.       left = 14
  366.       top = 10
  367.       width = 11
  368.       metric = 0
  369.       colorNormal = "BtnText"
  370.       transparent = true
  371.       fontName = "Arial"
  372.       fontSize = 9
  373.       text = "E-Mail:"
  374.       pageno = 3
  375.    endwith
  376.  
  377.  
  378.    this.ENTRYEMAIL = new ENTRYFIELD(this)
  379.    with (this.ENTRYEMAIL)
  380.       height = 1
  381.       left = 28
  382.       top = 10
  383.       width = 32
  384.       metric = 0
  385.       colorHighLight = ""
  386.       fontSize = 8
  387.       value = "entryEMail"
  388.       validRequired = true
  389.       pageno = 3
  390.       borderStyle = 7
  391.    endwith
  392.  
  393.  
  394.    this.LABELPHONE = new TEXT(this)
  395.    with (this.LABELPHONE)
  396.       height = 1
  397.       left = 14
  398.       top = 11
  399.       width = 11
  400.       metric = 0
  401.       colorNormal = "BtnText"
  402.       transparent = true
  403.       fontName = "Arial"
  404.       fontSize = 9
  405.       text = "Phone:"
  406.       pageno = 3
  407.    endwith
  408.  
  409.  
  410.    this.ENTRYPHONE = new ENTRYFIELD(this)
  411.    with (this.ENTRYPHONE)
  412.       height = 1
  413.       left = 28
  414.       top = 11
  415.       width = 22
  416.       metric = 0
  417.       colorHighLight = ""
  418.       fontSize = 8
  419.       value = "entryPhone"
  420.       validRequired = true
  421.       pageno = 3
  422.       borderStyle = 7
  423.    endwith
  424.  
  425.  
  426.    this.BUTTONERRORBACK = new PUSHBUTTON(this)
  427.    with (this.BUTTONERRORBACK)
  428.       onClick = class::BUTTONERRORBACK_ONCLICK
  429.       height = 1.2
  430.       left = 32
  431.       top = 11
  432.       width = 11
  433.       text = "OK"
  434.       metric = 0
  435.       fontSize = 8
  436.       group = true
  437.       pageno = 4
  438.       value = false
  439.    endwith
  440.  
  441.  
  442.    this.ERRORMSG = new TEXT(this)
  443.    with (this.ERRORMSG)
  444.       height = 6
  445.       left = 4
  446.       top = 3.5
  447.       width = 64
  448.       metric = 0
  449.       colorNormal = "BtnText"
  450.       transparent = true
  451.       fontName = "Arial"
  452.       fontSize = 8
  453.       fontBold = true
  454.       text = "Error!"
  455.       pageno = 4
  456.    endwith
  457.  
  458.  
  459.    this.LABELPASSWORD = new TEXT(this)
  460.    with (this.LABELPASSWORD)
  461.       height = 1
  462.       left = 12
  463.       top = 6
  464.       width = 12
  465.       metric = 0
  466.       colorNormal = "BtnText"
  467.       transparent = true
  468.       fontSize = 9
  469.       text = "Password:"
  470.       pageno = 2
  471.    endwith
  472.  
  473.  
  474.    this.LABELUSERNAME = new TEXT(this)
  475.    with (this.LABELUSERNAME)
  476.       height = 1
  477.       left = 12
  478.       top = 4
  479.       width = 12
  480.       metric = 0
  481.       colorNormal = "BtnText"
  482.       transparent = true
  483.       fontSize = 9
  484.       text = "User Name:"
  485.       pageno = 2
  486.    endwith
  487.  
  488.  
  489.    this.ENTRYUSER = new ENTRYFIELD(this)
  490.    with (this.ENTRYUSER)
  491.       height = 1
  492.       left = 26
  493.       top = 4
  494.       width = 20
  495.       metric = 0
  496.       colorHighLight = ""
  497.       fontSize = 8
  498.       value = ""
  499.       validRequired = true
  500.       pageno = 2
  501.       borderStyle = 7
  502.    endwith
  503.  
  504.  
  505.    this.PASSWORD1 = new ENTRYFIELD(this)
  506.    with (this.PASSWORD1)
  507.       onOpen = {; this.hiddenValue = ""}
  508.       key = class::PASSWORD1_KEY
  509.       height = 1
  510.       left = 26
  511.       top = 6
  512.       width = 20
  513.       metric = 0
  514.       colorHighLight = ""
  515.       fontSize = 8
  516.       fontBold = true
  517.       value = ""
  518.       validRequired = true
  519.       pageno = 2
  520.       borderStyle = 7
  521.    endwith
  522.  
  523.  
  524.    this.BUTTONOK = new PUSHBUTTON(this)
  525.    with (this.BUTTONOK)
  526.       onClick = class::BUTTONOK_ONCLICK
  527.       height = 1.1818
  528.       left = 14
  529.       top = 8.5
  530.       width = 11
  531.       text = "OK"
  532.       metric = 0
  533.       fontSize = 8
  534.       group = true
  535.       pageno = 2
  536.       value = false
  537.    endwith
  538.  
  539.  
  540.    this.BUTTONCANCEL = new PUSHBUTTON(this)
  541.    with (this.BUTTONCANCEL)
  542.       onClick = class::BUTTONCANCEL_ONCLICK
  543.       height = 1.2
  544.       left = 28
  545.       top = 8.5
  546.       width = 11
  547.       text = "Cancel"
  548.       metric = 0
  549.       fontSize = 8
  550.       group = true
  551.       pageno = 2
  552.       value = false
  553.    endwith
  554.  
  555.  
  556.    this.BUTTONFIRST1 = new BUTTONFIRST(this)
  557.    with (this.BUTTONFIRST1)
  558.       height = 1.1818
  559.       left = 10
  560.       top = 5
  561.       width = 12
  562.       metric = 0
  563.       fontSize = 8
  564.       group = true
  565.       pageno = 3
  566.       value = false
  567.    endwith
  568.  
  569.  
  570.    this.BUTTONNEXT1 = new BUTTONNEXT(this)
  571.    with (this.BUTTONNEXT1)
  572.       height = 1.1818
  573.       left = 36
  574.       top = 5
  575.       width = 12
  576.       metric = 0
  577.       fontSize = 8
  578.       group = true
  579.       pageno = 3
  580.       value = false
  581.    endwith
  582.  
  583.  
  584.    this.BUTTONLAST1 = new BUTTONLAST(this)
  585.    with (this.BUTTONLAST1)
  586.       height = 1.1818
  587.       left = 49
  588.       top = 5
  589.       width = 12
  590.       metric = 0
  591.       fontSize = 8
  592.       group = true
  593.       pageno = 3
  594.       value = false
  595.    endwith
  596.  
  597.  
  598.    this.BUTTONPREVIOUS1 = new BUTTONPREVIOUS(this)
  599.    with (this.BUTTONPREVIOUS1)
  600.       height = 1.1818
  601.       left = 23
  602.       top = 5
  603.       width = 12
  604.       metric = 0
  605.       fontSize = 8
  606.       group = true
  607.       pageno = 3
  608.       value = false
  609.    endwith
  610.  
  611.  
  612.    this.BUTTONAPPEND1 = new BUTTONAPPEND(this)
  613.    with (this.BUTTONAPPEND1)
  614.       height = 1.2
  615.       left = 10
  616.       top = 3.5
  617.       width = 12
  618.       metric = 0
  619.       fontSize = 8
  620.       group = true
  621.       pageno = 3
  622.       value = false
  623.    endwith
  624.  
  625.  
  626.    this.BUTTONSAVE1 = new BUTTONSAVE(this)
  627.    with (this.BUTTONSAVE1)
  628.       height = 1.1818
  629.       left = 36
  630.       top = 3.5
  631.       width = 12
  632.       metric = 0
  633.       fontSize = 8
  634.       group = true
  635.       pageno = 3
  636.       value = false
  637.    endwith
  638.  
  639.  
  640.    this.BUTTONDELETE1 = new BUTTONDELETE(this)
  641.    with (this.BUTTONDELETE1)
  642.       height = 1.1818
  643.       left = 23
  644.       top = 3.5
  645.       width = 12
  646.       metric = 0
  647.       fontSize = 8
  648.       group = true
  649.       pageno = 3
  650.       value = false
  651.    endwith
  652.  
  653.  
  654.    this.BUTTONABANDON1 = new BUTTONABANDON(this)
  655.    with (this.BUTTONABANDON1)
  656.       height = 1.1818
  657.       left = 49
  658.       top = 3.5
  659.       width = 12
  660.       metric = 0
  661.       fontSize = 8
  662.       group = true
  663.       pageno = 3
  664.       value = false
  665.    endwith
  666.  
  667.  
  668.    this.rowset = this.sample1.rowset
  669.  
  670.    // {Linked Method} form.open
  671.    function Form_open
  672.       // Fill the select list with alias names.
  673.  
  674.       // If running as a compiled app, check
  675.       // for strucmem.dll
  676.       if ( "runtime" $ LOWER( VERSION(0) ) )
  677.          this.mdi := false
  678.          if ( ( not FILE("strucmem.dll") ) and FILE("strucmem.dll",true) )
  679.             COPY FILE "strucmem.dll" TO "strucmem.dll"
  680.          endif
  681.       endif
  682.  
  683.       class::getAliasArrays()
  684.       this.comboDataSource.dataSource := "array form.BDEAlias"
  685.       if ( this.BDEAlias.size > 0 )
  686.          this.comboDataSource.value := this.BDEAlias[1]
  687.       endif
  688.    return ( GENERICFORM::OPEN() )
  689.  
  690.    function getAliasArrays() 
  691.       // Get a list of alias names from BDE.
  692.       local sName, sDriver
  693.       local nBDECursor, nResult, structDBD
  694.       DO "bde4api.prg"
  695.  
  696.       sName        = ""
  697.       sDriver      = ""
  698.       nBDECursor   = 0
  699.       nResult      = 0
  700.       structDBD    = new StructDBDesc()  
  701.  
  702.       this.BDEAlias  = new Array()
  703.       this.BDEDriver = new AssocArray()
  704.       nResult := DbiOpenDatabaseList( nBDECursor )
  705.  
  706.       do while ( nResult == DBIERR_NONE ) 
  707.          nResult := ;
  708.             DbiGetNextRecord( nBDECursor, dbiNOLOCK, ;
  709.                               structDBD.value, BDENULL)
  710.  
  711.          if ( nResult == DBIERR_NONE )
  712.             sName   := structDBD.getMember("szName")
  713.             sDriver := structDBD.getMember("szDbName")
  714.             this.BDEAlias.add( sName )
  715.             this.BDEDriver[ sName ] := sDriver
  716.          endif
  717.  
  718.          this.BDEAlias.sort()
  719.       enddo
  720.       nResult := DbiCloseCursor( nBDECursor )
  721.    return ( nResult )
  722.  
  723.    function OpenDatabase()
  724.       // Try to open the database. 
  725.       // Catch errors to handle bad passwords and 
  726.       // unavailable servers.
  727.       local sError, bConnected      
  728.       sError = ""
  729.       bConnected = false
  730.  
  731.       this.form.db = new Database()
  732.       this.form.dbasegen1 = new Query()
  733.       with ( this.form.db )
  734.          databaseName := RTRIM(this.form.comboDataSource.value)
  735.          loginString  := RTRIM(this.form.entryUser.value) + "/" +  ;
  736.                          RTRIM(this.form.password1.hiddenValue)
  737.       endwith
  738.       try 
  739.          this.form.db.active = true
  740.          if ( this.form.checkcreate.value ) 
  741.             class::CreateTable()
  742.             // refresh connection to see new table.
  743.             this.form.db.active := false
  744.             this.form.db.active := true
  745.          endif
  746.          class::LinkQuery()
  747.       catch (DbException e)    
  748.          sError := "Server Errors: <BR> "
  749.          for i = 1 to e.errors.size
  750.             sError += e.errors[i].message + " <BR> "
  751.          next
  752.          class::GoPageError( sError )
  753.  
  754.       catch (Exception e) 
  755.          class::GoPageError( e.message );
  756.  
  757.       finally
  758.          bConnected := ( this.form.db.active and ;
  759.                          this.form.dbasegen1.active )
  760.       endtry
  761.    return ( bConnected )
  762.  
  763.    // {Linked Method} form.password1.key
  764.    function PASSWORD1_key( nChar, nPosition, bShift, bControl)
  765.       local nShowChar, sChar
  766.       nShowChar = nChar
  767.       sChar     = CHR( nChar )
  768.       do case // Check for keys that modify the value
  769.          case ( nChar == BACKSPACE_KEY )
  770.               this.hiddenValue := STUFF( this.hiddenValue, nPosition - 1, 1, "")
  771.          case ( nChar == DELETE_KEY )
  772.               this.hiddenValue := STUFF( this.hiddenValue, nPosition, 1, "")
  773.          case ( nChar < 32 )
  774.               //  control key
  775.          otherwise
  776.               if ( isalpha(sChar) or ( sChar >= "0" and sChar <= "9" ) )
  777.                  this.hiddenValue := ;
  778.                    STUFF( this.hiddenValue, nPosition, 1, sChar )
  779.                  nShowChar = ASC('*')
  780.               endif     
  781.  
  782.       endcase
  783.    return ( nShowChar )
  784.  
  785.    function GoPageError( sMessage )
  786.       this.form.errorMsg.text := "<h3>" + sMessage + "</h3>"
  787.       this.form.pageno := PAGE_ERROR
  788.    return ( this.form.pageno )
  789.  
  790.    function CreateTable
  791.       // Create a populate a simple table.     
  792.       local bCreate
  793.       bCreate = false
  794.       if ( NOT this.form.db.tableExists("DBASEGEN") )
  795.          bCreate := this.form.db.executeSQL( ;
  796.             "CREATE TABLE DBASEGEN (CLIENTID  CHAR(10), " + ;
  797.                                    "COMPANY   CHAR(30), " + ;
  798.                                    "CONTACT   CHAR(30), " + ;
  799.                                    "EMAIL     CHAR(30), " + ;
  800.                                    "PHONE     CHAR(20))")
  801.          class::InsertData("'C1010','THE BURROUGHS GROUP','CHRIS BURROUGHS','CB@TBG.COM','415-555-4220'")
  802.          class::InsertData("'C1020','CATFISH INTERNATIONAL','BRENDA SMITH','BSMITH@CATFISH.COM','306-555-7275'")
  803.          class::InsertData("'C1030','GROUP TWO','ROB BOWMAN','RBOWMAN@AYE.NET','206-555-8080'")
  804.          class::InsertData("'C1040','XFAX CORPORATION','JOE FRITSCH','JOE@CROP.XFAX.COM','808-555-2600'")
  805.          class::InsertData("'C1050','SIGNS INC','TINA MASTERSON','TINA@SINC.COM','808-555-5231'")
  806.       endif
  807.    return ( bCreate )
  808.  
  809.    function InsertData( sValues )
  810.       // Insert field values into a new record.
  811.       local bInsert
  812.       bInsert = this.form.db.executeSQL( ;
  813.             "INSERT INTO DBASEGEN " + ;
  814.              "(CLIENTID, COMPANY, CONTACT, EMAIL, PHONE) VALUES " + ;
  815.              "(" + sValues + ")" )
  816.    return ( bInsert )
  817.  
  818.    function LinkQuery
  819.       // Create a query and link it to the Text controls.
  820.       local fGen
  821.       fGen = null
  822.  
  823.       with (this.form.dbasegen1)
  824.          database = this.form.db
  825.          sql = "SELECT * FROM DBASEGEN"
  826.          active = true
  827.       endwith
  828.  
  829.       this.form.rowset := this.form.dbasegen1.rowset
  830.       fGen := this.form.dbasegen1.rowset.fields
  831.       this.form.entryID.dataLink      := fGen["CLIENTID"]
  832.       this.form.entryCompany.dataLink := fGen["COMPANY"]
  833.       this.form.entryContact.dataLink := fGen["CONTACT"]
  834.       this.form.entryEMail.dataLink   := fGen["EMAIL"]
  835.       this.form.entryPhone.dataLink   := fGen["PHONE"]
  836.    return ( this.form.dbasegen1.active )
  837.  
  838.    // {Linked Method} form.buttonopen.onClick
  839.    function buttonOpen_onClick
  840.       // If the database is not a native BDE database, go to the
  841.       // password page, otherwise try to open the alias.
  842.       this.form.valueAlias.text  := this.form.comboDataSource.value
  843.       this.form.valueDriver.text := ;
  844.          this.form.BDEDriver[ this.form.comboDataSource.value ]
  845.       this.form.entryUser.value  := ""
  846.       this.form.password1.value  := ""
  847.       if ( this.form.valueDriver.text == "STANDARD" ) 
  848.          if ( class::OpenDatabase() ) 
  849.             this.form.pageno := PAGE_DATA
  850.          endif      
  851.       else     
  852.          this.form.pageno := PAGE_PASSWORD
  853.       endif
  854.    return ( this.form.pageno )
  855.  
  856.    // {Linked Method} form.buttonerrorback.onClick
  857.    function buttonErrorBack_onClick
  858.       // Go back to page 1.
  859.       this.form.pageno := PAGE_ALIAS
  860.    return ( this.form.pageno )
  861.  
  862.    // {Linked Method} form.buttondataback.onClick
  863.    function buttonDataBack_onClick
  864.       // Close the database and query and clear links.
  865.  
  866.       this.form.entryID.dataLink      := null
  867.       this.form.entryCompany.dataLink := null
  868.       this.form.entryContact.dataLink := null
  869.       this.form.entryEMail.dataLink   := null
  870.       this.form.entryPhone.dataLink   := null
  871.  
  872.       this.form.rowset := null
  873.       this.form.dbasegen1.active := false
  874.       this.form.db.active := false
  875.       this.form.pageno := PAGE_ALIAS
  876.    return ( this.form.pageno )
  877.  
  878.    // {Linked Method} form.buttoncancel.onClick
  879.    function buttonCancel_onClick
  880.       // Go back to page one from password page.
  881.       this.form.pageno := PAGE_ALIAS
  882.    return ( this.form.pageno )
  883.  
  884.    // {Linked Method} form.buttonok.onClick
  885.    function buttonOK_onClick
  886.       // Try using password.
  887.       if ( class::OpenDatabase() ) 
  888.          this.form.pageno := PAGE_DATA
  889.       endif
  890.    return ( this.form.pageno )
  891. endclass
  892.